烫烫烫烫烫烫!
相信这个标题,有十个人看,就有十个人搞不懂什么意思。

只有程序员才有可能点点头,然后会心一笑。
似乎这是程序员才懂的某种黑话。
知乎上有个这样的问题:“用一句话证明自己是程序员?”

“烫烫烫烫烫烫”
简单几行字,高赞上榜。

但是,这个“烫烫烫烫烫烫”到底是个啥意思?
莫非是程序对滚烫的CPU发出的控诉?
其实,答案非常简单——乱码。

道理我都懂,但为什么乱码偏偏是这串有点好笑的“烫烫烫烫烫烫”呢?
那就要从这段程序到底经历了什么开始讲起了。
Visual Studio的编译器分配完空间后,会顺手往里面装进去一点内容。默认装进去的东西也有几种差别:
①未分配或静态分配但未赋初值的内存空间,初值用0xCCCC填充;
②动态分配但未赋初值的内存空间,初值用0xCDCD填充;
③动态分配后又被回收了的内存空间,用0xDDDD填充;
正常情况下,这些内容是不会被访问到的。当然,这是正常情况。
当发生一些bug,如非常常见的数组越界的时候,事情就发生了。
因为bug,刚好以字符输出了情况①的填充内容,我们就会看到华丽而壮观的……

我们知道,在中国,VS输出汉字用的是GBK编码。
是的,0xCCCC就是“烫”的GBK编码!
顺带一提,0xCDCD对应的是汉字“屯”,而0xDDDD对应的是汉字“葺”。
这个bug实在是太常见了,“烫烫烫烫烫烫”也就顺势走红,甚至被当成了黑话。
不过,这个bug不是每次都会以这个滑稽又有点可爱的形式出现。

只有在按字符输出的情况下才能看到这些。
按int输出的话,看到的,只有索然无味的
-858993460(0xCCCCCCCC)
-842150451(0xCDCDCDCD)
-572662307(0xDDDDDDDD)
GBK编码确实为中国程序员带来了很多意想不到的麻烦。但也为大家带来了很多莫名其妙的欢乐。
比如名声更大的神秘东方武器“锟斤拷”!
感兴趣的小伙伴们可以自己查一查哦~